package structure.stack;

/**
 * 自定义数组栈
 * 元素以数组形式存放
 */
class CustomStack {
    private Object[] data;
    /** 最后放入栈的元素的索引 */
    private int top;
    /** 栈的空间大小 */
    private int size;

    /**
     * 设置栈内的元素数组
     * @param data
     */
    void setData(Object[] data) {
        this.data = data;
    }

    /**
     * 创建一个具有指定空间大小的空栈
     * @param size
     */
    CustomStack(int size) {
        this.size = size;
        data = new Object[size];
        top = -1;
    }

    /**
     * 如果栈已满
     * @return
     */
    boolean isFull() {
        return top == size - 1;
    }

    /**
     * 如果栈为空
     * @return
     */
    boolean isEmpty() {
        return top == -1;
    }

    /**
     * 将元素压入栈
     * @param element
     */
    void push(Object element) {
        if (this.isFull()) {
            System.out.println("栈已满");
        } else {
            top++;
            data[top] = element;
        }
    }

    /**
     * 弹出栈顶部的元素
     * @return
     */
    Object pop() {
        if (this.isEmpty()) {
            System.out.println("栈为空");
            return null;
        } else {
            Object element = data[top];
            top--;
            return element;
        }
    }
}
